/**
 * Created with IntelliJ IDEA.
 * Description:日期类
 * User: liangyuanzhang
 * Date: 2024-12-05
 * Time: 14:11
 */
//定义了一个日期类
public class Date {
    public int year;
    public int month;
    public int day;

    public Date(){//构造方法
        //this.year = 2008;
        this(2012,12,12);
        System.out.println("这个是不带参数的构造方法");
    }

    public Date(int year,int month,int day){
        this.year = year;
        this.month = month;
        this.day = day;
        System.out.println("调用了带有3个参数的构造方法...");
    }
    //写一个方法 来设置 年月日(属性)
    public void setDay(Date this,int year,int month,int day) {
        this.year = year;//成员变量
        this.month = month;
        this.day = day;
    }

    public void printDate(Date this){
        System.out.println(year+"年 "+month+"月 "+day+"日 ");
        //this.test();
    }

    public void test(){
        System.out.println("测试一下this...");
    }

    public static void main(String[] args) {
        Date date = new Date();//可以执行刚刚写的构造方法
        date.printDate();
        /*
        问题：一个对象的生成 至少有2步 很重要
        1.为对象分配内存
        2.调用合适的构造方法（构造方法不止一个）
         */
        /*
        实例化对象的时候 可以调用 构造方法 对对象进行初始化
         */
        /*
        总结：
        1.不止一个构造方法
        2.构造方法 作用就是来初始化 对象当中的成员
        3.构造方法可以发生重载
         */
    }



    public static void main1(String[] args) {
        Date date = new Date();
        date.setDay(2008,8,8);//Date的实例化
        date.printDate();

        Date date2 = new Date();
        date2.setDay(2009,9,9);
        date2.printDate();

        Date date3 = new Date();
        date3.setDay(2010,10,10);
        date3.printDate();
        /*
        提出问题：
        这么多对象，都调用了同一个setDtae方法，在这个方法内
        是怎么区分是哪个对象调用setDate方法中的 year,month,day？
         */
        /*
        问题2:形参名和 成员变量 同名 都是0
        原因：此时在方法内，year，month,day都是局部变量，此时局部变量优先使用。
        形参自己给自己赋值，并没有修改到对象当中的year, month, day
         */
        /*
        问题2的解决方案就是加this关键字
         */
        /*
        提出新问题：this到底代表什么？答：this代表当前对象的引用
        问：什么是当前对象？怎么判断当前对象？
        答：谁（哪个对象的引用）调用了该方法 this就代表谁（哪个对象）
         */
        //this不能在静态方法中使用
        /*
        this的用法有3中：
        1.可以通过this 访问 当前对象的成员变量
        2.可以通过this 访问 当前对象的非静态的成员方法
        3.可以通过this 访问 当前对象的 其他构造方法
        问题：什么是构造方法 --> 构造方法没有返回值
        注意：方法名 需要和 类名一样
         */
    }
}
/*
1.会定义 类 和 创建对象
2.会访问对象当中的成员变量 和 成员方法
3.明白this干嘛的
4.明白构造方法干嘛的
 */